package com.dxy.yesas2020goals.study.partone.disignprinciple.dependenceinversionprinciple;

/**
 * @author victorydeng
 * @Classname DipTest
 * @Description 依赖倒置原则测试类
 * @Date 2020/2/24 22:39
 * @Created by victorydeng
 */
public class DipTest {

  public static void main(String[] args) {
    //我们的应用层 如果依赖于具体的实现的话 会使用如下方式调用 依赖于具体的实现
    // 如果被高层应用调用时有额外的需求比如学习AI课程等需要频繁的修改

    StudentXiaoMing studentXiaoMing = new StudentXiaoMing();
    studentXiaoMing.studyJava();
    studentXiaoMing.studyPhp();
    studentXiaoMing.studyPython();

    //使用了DIP原则后 高层应用不在依赖于具体的实现
//    StudentXiaoMing xiaoMing = new StudentXiaoMing();

    //这里可以随意输入想要学习的课程
//    xiaoMing.study(new JavaCourse());
//    xiaoMing.study(new PhpCourse());
//    xiaoMing.study(new PythonCourse());

    //升级到构造器注入--start
//    StudentXiaoMing student = new StudentXiaoMing(new JavaCourse());
//    student.study();
    //升级到构造器注入--end

    //升级到set注入--start --一版用单例模式提供的只new一次的方法
    StudentXiaoMing ming = new StudentXiaoMing();
    ming.setCourse(new JavaCourse());
    ming.study();
    //升级到set注入--end




  }

}
